# Rubedo Discussion Native 0.2.44-alpha

## Исправления
- Светлая тема: непрозрачная строка ввода, читаемые поля и контрастные рамки; тени больше не затемняют редактор сообщения.
- Баннер профиля заполняет фиксированную обрезанную область, а не съезжает вниз из-за исходных размеров картинки.
- Эхоподавление теперь можно отключать и включать в настройках во время звонка; выбор сохраняется.

## Звук
- Отдельные переключатели DeepFilterNet, эхоподавления и автоматической регулировки громкости.
- Битрейты 16/32/48/64 кбит/с. Экономный режим использует 24 кбит/с, не стирая обычный выбор.
- Выбор устройства вывода голосового канала с безопасным переключением и восстановлением при ошибке. Этот выбор не перенаправляет звуки интерфейса, трансляции и YouTube.

## Настройки и оформление
- Раздел безопасности: аккаунт и история логинов, пароль, подтверждение почты, привязки, второй фактор и сессии.
- Настройки доступных серверных проверок файлов Defender/VirusTotal. Отправка файлов в VirusTotal требует явного подтверждения; серверные ограничения не обходятся.
- Маркет оформления: Ruby, Anime, ASCII и Pixel, с сохранением стиля и согласованными палитрами, шрифтами, скруглениями и тенями.
- Для Anime перенесён фон, для ASCII — линии экрана; у карточек Pixel усилена рамка. Интерфейс остаётся нативным: попиксельное совпадение, CSS backdrop blur и nearest-neighbor для всех изображений не заявляются.

## Стикеры
- Создание и переименование собственных наборов, установка/удаление наборов, управление стикерами, эмодзи и порядком.
- Редактор статических изображений: размещение в квадрате 512×512, масштабирование, обрезка и обводка, сохранение PNG.
- GIF можно сохранить анимированным в исходном виде в пределах лимита: обрезка и обводка относятся к статическому варианту.
- Ограничено чтение больших файлов. Стикер не отправляется на публикацию, пока проверка файла находится в состоянии pending; заражённые и заблокированные файлы отклоняются.

## YouTube
- Официальный встроенный плеер youtube-nocookie внутри карточки сообщения; увеличение в пределах клиента, закрытие и открытие в браузере.
- Основной интерфейс остаётся GPUI. Только видео использует установленный WebView2 Runtime; если его нет, остаётся открытие в браузере. Автоматической установки Runtime нет.
- Плееру не передаются токен приложения, мост нативных команд или разрешения камеры/микрофона. Уход со страницы закрывает плеер.

## Границы проверки
Автотесты и проверка локального WebView2 не заменяют визуальную проверку всех экранов, реальный акустический тест, звонок на двух машинах и воспроизведение YouTube. Эти ручные сценарии не объявляются пройденными. Синтетический AEC использует опорный сигнал голосового воспроизведения, а не весь звук Windows/YouTube.

Лицензионные уведомления AEC, DeepFilterNet, WebView2 и остальных включённых компонентов сохранены в README.txt. Старые записи README ниже относятся к соответствующим историческим версиям и могут описывать уже снятые ограничения.

HISTORICAL RELEASE NOTES / ИСТОРИЯ ВЕРСИЙ


Rubedo Discussion Native 0.2.43-alpha
Acoustic echo cancellation is now part of the microphone path, before DeepFilterNet, the gate and AGC. It uses the final mixed speaker PCM after gain, limiting and 16-bit conversion. The reference is aligned with WinMM device sample positions rather than the latest queued block; capture backlog, mute/device changes, playback underruns and independent input/output clock drift are handled without adding a microphone buffer. The adaptive filter covers a 300 ms echo tail and protects near-end speech during double talk. If device timing cannot be obtained or the reference is missing, only echo cancellation is bypassed; the existing denoiser and mute/epoch checks remain in place. Synthetic tests do not guarantee the same attenuation with every microphone, speaker, Bluetooth device or room. No microphone recordings are saved or uploaded.

Rubedo Discussion Native 0.2.42-alpha
Voice playback holds up better on unstable connections. Each speaker now has a small jitter buffer: playback starts once 40 ms of audio has arrived (a short utterance starts anyway after 40 ms), a packet that arrives late is bridged with Opus packet-loss concealment that fades out within 60 ms instead of an abrupt cut to silence, and audio that piles up after a network burst is trimmed back to 60 ms with a 5 ms crossfade; if the delay stays at 40 ms or more for a whole second, one 20 ms frame is dropped, at a quiet moment where possible. Playback is now paced by the sound card instead of a system timer: the voice thread keeps two to three 20 ms frames queued in the device and renders a new one only after one has finished playing, so output no longer drifts or silently drops frames when Windows wakes the thread late, and the thread asks Windows for a higher priority. Volume changes and deafen glide over one 20 ms frame instead of stepping. Rich messages are selectable too: message text with links, mentions and spoilers, and code blocks, can be selected with the mouse and copied with Ctrl+C; links, mentions and spoilers still react to a click, and a press that turns into a drag selects text instead. Animated GIFs no longer make the window redraw on every monitor refresh (180 times a second on a 180 Hz screen): every frame is a separate image, the window wakes up only when a frame changes (at most about 60 times a second), copies of the same GIF play in step, and GIFs are animated only while the window is active and reduced motion is off. The separate stream window (overlay and full screen) now frees the previous frame from video memory instead of keeping every frame until the window is closed, and redraws only when a new frame arrives instead of 20 times a second.

Rubedo Discussion Native 0.2.41-alpha
Screen sharing is much lighter on the GPU: the capture helper now converts each frame to NV12 and scales it to the stream size on the video card (a compute shader), then reads back only the finished frame instead of copying the full BGRA frame to system memory and converting it on the CPU. Measured on an RX 6500 XT: GPU load of the capture helper ~15% -> ~8%, CPU load about a third lower, the picture is identical (luma bit-exact, chroma within 1/255). Frames where only the mouse cursor moved are no longer reprocessed. If the GPU path is not available, the helper falls back to the old CPU conversion by itself (RUBEDO_GPU_OFF=1 forces it).

Rubedo Discussion Native 0.2.40-alpha
Text selection: message text without markdown is a SelectableText run — drag to select, Ctrl+C copies (a RubedoRoot key binding wired to the window selection layer). Rich messages (links, spoilers, code) still render as before and are not selectable yet.

Rubedo Discussion Native 0.2.39-alpha
Per-user network metrics: Settings -> Тестировщик -> "Обновить метрики сети" shows every connection with RTT (server ping every 5 s, the client answers with pong), traffic, voice frames in/out, drops and uptime. Requires the 0.2.39 core.

Rubedo Discussion Native 0.2.38-alpha
The screen-source picker looks like Discord now: large window thumbnails in a grid with the caption underneath, plus a "Транслировать звук" switch (on by default). The "Демонстрация экрана" button in the sidebar opens the same picker instead of starting with the last source.

Rubedo Discussion Native 0.2.37-alpha
Light theme: Settings -> Interface has a "Тёмная тема" switch (the pref is shared with 1.4.2). The whole palette became mode-aware, thin borders and hovers invert automatically. The screen-source picker now shows live thumbnails of windows, captured in the background.

Rubedo Discussion Native 0.2.36-alpha
The WebSocket no longer uses a read timeout: the socket is non-blocking and the loop waits with WSAPoll. A TLS record can no longer be interrupted halfway (os error 997), and that interruption was what corrupted decryption and dropped the session every few minutes.

Rubedo Discussion Native 0.2.35-alpha
The WebSocket transport moved from the Windows TLS stack (SChannel) to rustls. An interrupted read used to corrupt the TLS stream and drop the connection with SEC_E_DECRYPT_FAILURE - that was the periodic reconnect while watching a stream or sitting in voice. Combined with 0.2.34, voice, screen share and viewing recover on their own after any drop.

Rubedo Discussion Native 0.2.34-alpha
A short connection drop no longer breaks the call: voice rejoins by itself, the running screen share is re-announced with a new stream id, and viewers re-subscribe automatically instead of reopening the stream - including when it is the streamer who reconnected. The stream tile shows "Переподключение…" while the link is down.

Rubedo Discussion Native 0.2.33-alpha
Opening the stream window no longer crashes the app: the platform drag-area API re-entered GPUI while it was borrowed. Picture-in-picture is dragged by the window procedure itself, still keeps 16:9 and still does not maximize on a frame double click.

Rubedo Discussion Native 0.2.32-alpha
Picture-in-picture finally drags: the GPUI window drag API is a no-op on Windows, so the window now uses the platform drag area (WindowControlArea::Drag) with a system move-loop fallback. It still keeps 16:9 and does not maximize when its frame is double clicked.

Rubedo Discussion Native 0.2.31-alpha
The small stream window: a double click on its frame no longer maximizes it (Windows default), and the window can be dragged by the picture. Full screen still opens on the monitor of the app window and keeps 16:9 in picture-in-picture.

Rubedo Discussion Native 0.2.30-alpha
The stream window: full screen opens on the monitor where the app window is (it used to jump to the primary display), cannot be resized or dragged, and has no expand button. The picture-in-picture window keeps a 16:9 shape while you resize it.

Rubedo Discussion Native 0.2.29-alpha
Watching a screen share no longer drops the connection every couple of minutes: Windows reports the tail of a large video frame as ERROR_IO_PENDING (997) and the client treated it as a dead socket. While you are sharing, the screen-share button in the voice panel becomes a stop button.

Rubedo Discussion Native 0.2.28-alpha
Separate-window and full-screen streams now show the live picture instead of a permanent "waiting for frame" (the in-app window consumed the only copy of each frame). The image menu (copy/save) now works on an image opened in the lightbox, and its labels stay inside the menu. Right-click a stream tile to open the participant menu with voice volume and stream audio.

Rubedo Discussion Native 0.2.16-alpha
Fixes from live testing: 1080p streams crashed the viewer (Media Foundation aligns frame height 1080→1088; the client rejected the padded size) and some decoders padded the frame width (854→864) showing a green stripe — the decoder now maps padded sizes back to the real layer sizes. The viewer decoder receives the low layer's real dimensions.

Rubedo Discussion Native 0.2.14-alpha
The capture helper now ships inside the update package (0.2.13 sent it --low that old helpers rejected, breaking screen share). If an old helper is detected, the stream falls back to source quality instead of failing.

Rubedo Discussion Native 0.2.13-alpha
Always-on incident journal for disconnects and stream stops ("Copy diagnostics" in Settings → Tester; the server now records client versions). Viewer stream quality: Оригинал/480p switch on the stream card, default in Settings → Media; Native streamers provide the 480p low layer on demand (no upstream until a viewer asks).

Rubedo Discussion Native 0.2.11-alpha
Updater handles renamed executables and reports failures. Voice indicators use the selected accent; profile and voice hover styling updated.

Rubedo Discussion Native 0.2.10-alpha
Microphone is enabled on joining voice. Change input device during a call without muting.

Rubedo Discussion Native 0.2.9-alpha
Choose a microphone in Sound settings.

Rubedo Discussion Native 0.2.8-alpha
Fix H.264 capture encoder output sample memory leak.

Rubedo Discussion Native 0.2.7-alpha
Microphone input sensitivity, live meter, voice gate and local preview.

Rubedo Discussion Native 0.2.6-alpha
Per-user digital voice peak limiter. Avatar retry and voice-card profile refresh.

Rubedo Discussion Native 0.2.5-alpha
Screen viewer: synchronized latest-frame notification. Opt-in local tester log includes aggregate viewer frame and error categories.

Rubedo Discussion Native 0.2.4-alpha
Activity detection: games and Windows media sessions. Activity visibility can be controlled in Settings.
Typing sound now follows keyboard auto-repeat, with a rate limit.

Rubedo Discussion Native 0.2.3-alpha
Experimental: animated caret and text selection in message input.
Other text animations are not included yet.

Rubedo Discussion Native — альфа 0.2.2

В этом обновлении — локальная диагностика обрывов связи, голосового канала и демонстрации, а также звуки демонстрации.

Чтобы помочь с поиском сбоя: Настройки → Тестировщик → включи «Режим тестировщика» до повторения проблемы. После сбоя нажми «Открыть папку журналов» и отправь current.jsonl и, если есть, previous.jsonl Альберту. Укажи примерное время и что делал. Журнал хранится только на твоём ПК, автоматически никуда не отправляется; экран, звук, сообщения, токены и ввод не записываются. Диагностику можно выключить и журналы удалить на этой же странице.

F9 по умолчанию ставит метку в журнал и может перехватываться в других программах; клавишу можно изменить. F10 — аварийная остановка демонстрации, она также отключает голос. Настроить её можно на той же странице.

Исправление обрывов ещё не подтверждено. Светлая тема и плавный курсор пока не добавлены.

Rubedo Discussion Native — альфа 0.2.1
=====================================

Нативный интерфейс Rubedo Discussion работает на GPUI (Rust). Только официальный встроенный плеер YouTube использует отдельный WebView2 Runtime; основной интерфейс от него не зависит. Если Runtime отсутствует, видео можно открыть в браузере. Runtime автоматически не устанавливается.
Это отдельное приложение: 1.4.2 остаётся основным клиентом, пока нативный не догонит его по функциям.

Запуск: rubedo-discussion-native.exe (установка не нужна).
Вход: подхватывает сессию 1.4.2; если её нет — вход через браузер, как в 1.4.2.

Что нового в 0.2.1-alpha
  • голосовые каналы, регулировка громкости и заглушение участников;
  • демонстрация экрана с возможностью передачи звука приложений;
  • просмотр чужой демонстрации и отдельная громкость звука стрима;
  • информация о соединении и экономия трафика; настройки «Медиа».

Важно: это тестовая альфа. Просмотр чужих стримов поддерживает H.264 до
1920×1080, звук принимается в моно. Качество, производительность и совместимость
со всеми конфигурациями ещё требуют проверки в реальных звонках. Голос и демонстрация
могут работать не полностью как в 1.4.2.

Установка: распакуй всю папку из архива и запускай rubedo-discussion-native.exe.
Не удаляй файлы rubedo-native-capture-helper.exe, rubedo_dfn.dll и dfn3.model:
они нужны для демонстрации, просмотра стримов и шумоподавления.

Что нового в 0.2.0
  • строка ввода как в 1.4.2: [+] — прикрепить файлы, GIF, стикеры, эмодзи;
    вставка картинок из буфера (Ctrl+V) и перетаскивание файлов в чат,
    загрузка с проверкой на вирусы, полоска прогресса;
  • панель выражений: GIF (поиск GIPHY, тренды, избранное), стикеры (наборы),
    эмодзи (поиск, категории, недавние, оттенки кожи);
  • подсказки при вводе: :эмодзи: (автозамена по закрывающему двоеточию) и @упоминания;
  • действия с сообщениями: панель при наведении и меню по ПКМ —
    реакция, ответ, редактирование, удаление (Shift — без подтверждения),
    пересылка, закрепление, копирование текста/ссылки/ID, выделение нескольких сообщений;
  • быстрые реакции (8 последних + полный выбор);
  • закреплённые сообщения — кнопка в шапке канала, переход к сообщению по клику;
  • меню профиля по клику на себя: статус (в сети / не активен / не беспокоить / невидимый),
    свой статус, копирование ID, выход;
  • настройки (шестерёнка): «Профиль» — аватар, имя, статус, «о себе» с предпросмотром;
    «Интерфейс» — акцентный цвет, анимации (стиль и скорость), индикатор нагрузки;
  • карточки профилей: клик по имени, аватару, участнику или @упоминанию —
    баннер, статус, «о себе», роли, общие серверы и друзья, «Написать»,
    добавление в друзья, копирование имени/ID;
  • страница друзей («Главная» → «Друзья»): добавление по логину, входящие
    и исходящие заявки, список друзей, «Написать», удаление;
  • звёздочка на GIF в ленте — добавить/убрать из избранного; GIF-ссылки внутри текста;
  • карточки приглашений на сервер в чате — «Присоединиться» / «Перейти»;
  • превью YouTube: название, автор, обложка (клик открывает видео в браузере);
  • ссылки на сообщения и каналы открываются прямо в приложении, переход к старому
    сообщению (закреп, ответ, ссылка) сам догружает историю;
  • звуки как в 1.4.2: три набора (стекло / дерево / колокольчики) для сообщений
    и интерфейса, звуки печати (4 вида клавиатуры), громкость отдельно для каждого;
  • уведомления: всплывающие оповещения (клик — открыть канал), мигание в панели задач,
    отключение по событиям, «Не беспокоить» с исключениями для выбранных друзей,
    заглушённые каналы/категории/серверы учитываются;
  • настройки «Звук» и «Уведомления» — как в 1.4.2, с предпрослушиванием;
  • «Проверить обновления» (внизу меню настроек) — скачивает новую версию,
    сверяет контрольную сумму и перезапускает приложение;
  • анимации: появление новых сообщений, смена каналов, всплывающие окна, «печатает…».

Что уже было в 0.1
  • оформление как в 1.4.2: прямые углы, свой заголовок окна, рубиновые акценты,
    моно-капс подписи и индикатор «Нагрузка» (ЦП и память процесса);
  • серверы, каналы (категории сворачиваются), личные сообщения;
  • лента с подгрузкой истории, разделители дней, группировка сообщений;
  • форматирование: жирный/курсив/зачёркнутый, код, упоминания, ссылки;
  • картинки, GIF (анимация), стикеры, файлы (открываются в браузере);
  • ответы, пересланные сообщения, реакции;
  • «печатает…», непрочитанные и упоминания;
  • участники с ролями и статусами, всё обновляется в реальном времени.

Чего пока нет
  настройки сервера, светлая тема, редактор наборов стикеров и баннера профиля,
  трей, встроенный YouTube-плеер; разделы настроек «Безопасность», «Активность»,
  «Маркет» и «Windows». Голос и демонстрации пока не полностью повторяют 1.4.2.

Горячие клавиши
  Enter — отправить, Shift+Enter — новая строка, ↑ в пустой строке — изменить последнее своё,
  Esc — закрыть окно/меню/отменить ответ или редактирование.

Данные: %APPDATA%\RubedoDiscussion
  session-native.json — сессия альфы (выход в альфе не разлогинивает 1.4.2);
  native-crash.log — отчёт, если приложение упало.

Third-party notices for acoustic echo cancellation
==================================================
Acoustic echo cancellation in src/voice/aec.rs is adapted from the SpeexDSP
mdf.c design in Rust, with a mixed-radix FFT following the KISS FFT layout.

SpeexDSP mdf.c
Source: https://github.com/xiph/speexdsp/blob/master/libspeexdsp/mdf.c
Copyright (C) 2003-2008 Jean-Marc Valin

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

3. The name of the author may not be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

KISS FFT
Source: https://github.com/mborgerding/kissfft
Copyright (c) 2003-2010, Mark Borgerding. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors
   may be used to endorse or promote products derived from this software without
   specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Third-party notice: unicode-segmentation 1.13.3 (MIT)
Copyright (c) 2015 The Rust Project Developers

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


Video player dependency notices
===============================
webview2-com 0.39.1, webview2-com-sys 0.39.1 and webview2-com-macros 0.8.1 (MIT)
Source: https://github.com/wravery/webview2-rs
Copyright (c) 2021 Bill Avery

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

windows 0.62.2 (MIT)
Copyright (c) Microsoft Corporation.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Microsoft WebView2 SDK 1.0.3800.47 - static loader (BSD-3-Clause)
License: https://www.nuget.org/packages/Microsoft.Web.WebView2/1.0.3800.47/License

Copyright (C) Microsoft Corporation. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.
* The name of Microsoft Corporation, or the names of its contributors may not
  be used to endorse or promote products derived from this software without
  specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
